﻿//小红拿到了一个长度为n  的数组。她每次操作可以让某个数加 1 或者某个数减 1 。
//小红最多能进行k  次操作。她希望操作结束后，该数组出现次数最多的元素次数尽可能多。
//你能求出这个最大的次数吗？
//
//输入描述 :
//	第一行两个正整数n  和k第二行有n  个正整数ai,1≤n≤10^5,1≤k≤10^12,1≤ai≤10^9
//
//输出描述:
//	不超过k  次操作之后，数组中可能出现最多次数元素的次数。
//
//输入
//	5 3
//	6 3 20 8 1
//输出
//	2
//说明
//	共 3 次操作如下：
//	第一个数加一。
//	第二个数加一。
//	第四个数减一。
//	数组变成了 7 4 20 7 1 ，共有 2 个相同的数： 7 。
//	可以证明， 2 为最优解。另外，此上操作并不是唯一的操作。

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
LL n, k;
LL arr[N];
LL sum[N]; // 前缀和数组
LL cal(int l, int r)
{
    int mid = (l + r) / 2;
    return (mid - l - r + mid) * arr[mid] - (sum[mid - 1] - sum[l - 1]) +
        (sum[r] - sum[mid]);
}
int main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> arr[i];
    sort(arr + 1, arr + 1 + n);
    // 初始化前缀和数组
    for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + arr[i];

    int left = 1, right = 1, ret = 1;
    while (right <= n)
    {
        // 进窗⼝
        LL cost = cal(left, right);
        while (cost > k) // 判断
        {
            left++; // 出窗⼝
            cost = cal(left, right);
        }
        // 更新结果
        ret = max(ret, right - left + 1);
        right++;
    }

    cout << ret << endl;

    return 0;
}
